|
ARD2
1.00 for Rev B. Hardware
Airbag Reference Demonstrator using MPC5604P
|
Driver for central accelerometer. More...
#include "derivative.h"#include "utils.h"#include "MMA68xx.h"#include "DSPI.h"#include "MailScheduler.h"#include <limits.h>#include <stdlib.h>Functions | |
| uint8_t | u8fnMMA6800ReadRegister (const uint8_t cu8DSPIInstance, const uint8_t cu8ChipSelect, const uint8_t cu8TransferMode, uint16_t u16Register, uint16_t *pu16DataRead) |
| Reads one register from the MMA6800. | |
| uint8_t | u8fnMMA6800WriteRegister (const uint8_t cu8DSPIInstance, const uint8_t cu8ChipSelect, const uint8_t cu8TransferMode, uint16_t u16Register, uint8_t u8ValueToWrite, uint16_t *pu16DataRead) |
| Writes to one register of the MMA6800. | |
| uint8_t | u8fnMMA6800Reset (const uint8_t cu8DSPIInstance, const uint8_t cu8ChipSelect, const uint8_t cu8TransferMode) |
| Performs a soft-reset of the device. | |
| uint8_t | u8fnMMA6800ReadAccel (const uint8_t cu8DSPIInstance, const uint8_t cu8ChipSelect, const uint8_t cu8TransferMode, const uint8_t cu8Axis, const uint8_t cu8ConfigMemory, uint16_t *pu16AccelResults, const uint8_t cu8Accel) |
| Reads acceleration from the X, Y or both axes. | |
| uint8_t | u8fnMMA6800ExtractRegisterResponse (const uint16_t *pu16RawResponse, uint8_t *pu8Response, uint8_t u8Size) |
| Extracts 8-bit information from raw data. | |
| uint8_t | u8fnMMA6800ExtractAccelResponse (const uint16_t *pu16RawResponse, uint16_t *pu16Response, uint8_t u8Size, const uint8_t cu8Accel) |
| Extracts 10-bit accel information from raw data. | |
| uint8_t | u8fnMMA6800ScheduledBatchOp (const uint8_t cu8DSPIInstance, const uint8_t cu8ChipSelect, const uint16_t *pu16DataToSend, uint16_t *pu16UnfilteredDataReceived, uint8_t u8Size) |
| Schedules n transfers to the device. | |
| uint8_t | u8fnMMA6800BatchOp (const uint8_t cu8DSPIInstance, const uint8_t cu8ChipSelect, const uint16_t *pu16DataToSend, uint16_t *pu16UnfilteredDataReceived, uint8_t u8Size) |
| Sends n transfers to the device, and reads-back as well. | |
Variables | |
| const uint16_t | cau16MMA6800Reset [] |
| const uint16_t | cau16MMA6800ReadAllRegisters [] |
| const uint16_t | cau16MMA6500ReadAllRegisters [] |
| const uint16_t | cau16MMA6800PerformAccelReading [] |
| const uint16_t | cau16MMA6500PerformAccelReading [] |
| uint8_t(*const | u8pfnMMA6800BatchOp [])(const uint8_t cu8DSPIInstance, const uint8_t cu8ChipSelect, const uint16_t *pu16DataToSend, uint16_t *pu16UnfilteredDataReceived, uint8_t u8Size) |
| uint8_t | gau8MMA6800GlobalResult [MMA6800_GLOBAL_BUFFER_SIZE] |
Driver for central accelerometer.
Drivers for central accelerometer.
Copyright (c) 2011 Freescale Semiconductor Freescale Confidential Proprietary
History:
| uint8_t u8fnMMA6800BatchOp | ( | const uint8_t | cu8DSPIInstance, |
| const uint8_t | cu8ChipSelect, | ||
| const uint16_t * | pu16DataToSend, | ||
| uint16_t * | pu16UnfilteredDataReceived, | ||
| uint8_t | u8Size | ||
| ) |
Sends n transfers to the device, and reads-back as well.
| cu8DSPIInstance,: | DSPI Instance to use. |
| cu8ChipSelect,: | ChipSelect mask to be used. |
| pu16DataToSend,: | Pointer to complete message to send. Parity is calculated within the function. Constant tables in this file should be used accordingly. |
| pu16UnfilteredDataReceived,: | Pointer to where part's response should be stored. This is the complete response, no filters. |
| u8Size,: | Number of words to send/receive. |
| uint8_t u8fnMMA6800ExtractAccelResponse | ( | const uint16_t * | pu16RawResponse, |
| uint16_t * | pu16Response, | ||
| uint8_t | u8Size, | ||
| const uint8_t | cu8Accel | ||
| ) |
Extracts 10-bit accel information from raw data.
| pu16RawResponse,: | pointer to 16-bit, unfiltered response. |
| pu16Response,: | pointer to where filtered data should be stored. |
| u8Size,: | Size of raw responses to filter. |
| cu8Accel,: | Choice between MESQUITE and SYCAMORE sensor. |
| uint8_t u8fnMMA6800ExtractRegisterResponse | ( | const uint16_t * | pu16RawResponse, |
| uint8_t * | pu8Response, | ||
| uint8_t | u8Size | ||
| ) |
Extracts 8-bit information from raw data.
| pu16RawResponse,: | pointer to 16-bit, unfiltered response. |
| pu8Response,: | pointer to where filtered data should be stored. |
| u8Size,: | Size of raw responses to filter. |
| uint8_t u8fnMMA6800ReadAccel | ( | const uint8_t | cu8DSPIInstance, |
| const uint8_t | cu8ChipSelect, | ||
| const uint8_t | cu8TransferMode, | ||
| const uint8_t | cu8Axis, | ||
| const uint8_t | cu8ConfigMemory, | ||
| uint16_t * | pu16AccelResults, | ||
| const uint8_t | cu8Accel | ||
| ) |
Reads acceleration from the X, Y or both axes.
| cu8DSPIInstance,: | DSPI Instance to use. |
| cu8ChipSelect,: | ChipSelect mask to be used. |
| cu8Axis,: | 1 for X, 2 for Y, or 3 for both. Any other value will result in an X-axis reading. |
| cu8ConfigMemory,: | Index to perform accel reading with a given configuration. According to the spec: [0] = Offset Compensated, Signed data, ARM disabled [1] = Offset Compensated, Signed data, ARM enabled [2] = Offset Compensated, Unsigned data, ARM disabled [3] = Offset Compensated, Unsigned data, ARM enabled [4] = Raw data, Signed data, ARM disabled [5] = Raw data, Signed data, ARM enabled [6] = Raw data, Unsigned data, ARM disabled [7] = Raw data, Unsigned data, ARM enabled Any other value will return an error code. |
| pu16AccelResults,: | Pointer to location where accel reading(s) will be stored. |
| cu8Accel,: | Choice between MESQUITE and SYCAMORE sensor. |
| uint8_t u8fnMMA6800ReadRegister | ( | const uint8_t | cu8DSPIInstance, |
| const uint8_t | cu8ChipSelect, | ||
| const uint8_t | cu8TransferMode, | ||
| uint16_t | u16Register, | ||
| uint16_t * | pu16DataRead | ||
| ) |
Reads one register from the MMA6800.
| cu8DSPIInstance,: | DSPI Instance to use. |
| cu8ChipSelect,: | ChipSelect mask to be used. |
| u16Register,: | Address of the register to read with LSB in BIT8. For simplicity, use the #defines in this same file. |
| cu8TransferMode,: | either MMA6800_TRANSFER_MODE_IS_SCHEDULED or MMA6800_TRANSFER_MODE_IS_IMMEDIATE - first option will schedule the transfer using the scheduler, second one will execute the command immediately |
| pu16DataRead,: | Pointer to where data read should be stored. two 16-bit words will be stored: First to be disregarded, second word will contain two 8-bit words: First is status (should read $2E or $3E), second one is data). The second 16-bit word can be fed as argument to u8fnMMA6800ExtractRegisterResponse to get a valid answer. |
| uint8_t u8fnMMA6800Reset | ( | const uint8_t | cu8DSPIInstance, |
| const uint8_t | cu8ChipSelect, | ||
| const uint8_t | cu8TransferMode | ||
| ) |
Performs a soft-reset of the device.
| cu8DSPIInstance,: | DSPI Instance to use. |
| cu8ChipSelect,: | ChipSelect mask to be used. |
| cu8TransferMode,: | either MMA6800_TRANSFER_MODE_IS_SCHEDULED or MMA6800_TRANSFER_MODE_IS_IMMEDIATE - first option will schedule the transfer using the scheduler, second one will execute the command immediately |
| uint8_t u8fnMMA6800ScheduledBatchOp | ( | const uint8_t | cu8DSPIInstance, |
| const uint8_t | cu8ChipSelect, | ||
| const uint16_t * | pu16DataToSend, | ||
| uint16_t * | pu16UnfilteredDataReceived, | ||
| uint8_t | u8Size | ||
| ) |
Schedules n transfers to the device.
| cu8DSPIInstance,: | DSPI Instance to use. |
| cu8ChipSelect,: | ChipSelect mask to be used. |
| pu16DataToSend,: | Pointer to complete message to send. Parity is calculated within the function. Constant tables in this file should be used accordingly. |
| pu16UnfilteredDataReceived,: | Pointer to where part's response should be stored. This is the complete response, no filters. |
| u8Size,: | Number of words to send/receive. |
| uint8_t u8fnMMA6800WriteRegister | ( | const uint8_t | cu8DSPIInstance, |
| const uint8_t | cu8ChipSelect, | ||
| const uint8_t | cu8TransferMode, | ||
| uint16_t | u16Register, | ||
| uint8_t | u8ValueToWrite, | ||
| uint16_t * | pu16DataRead | ||
| ) |
Writes to one register of the MMA6800.
| cu8DSPIInstance,: | DSPI Instance to use. |
| cu8ChipSelect,: | ChipSelect mask to be used. |
| u16Register,: | Address of the register to write with LSB in BIT8. For simplicity, use the #defines in this same file. |
| u8ValueToWrite,: | 8-bit value to be written to the register. |
| cu8TransferMode,: | either MMA6800_TRANSFER_MODE_IS_SCHEDULED or MMA6800_TRANSFER_MODE_IS_IMMEDIATE - first option will schedule the transfer using the scheduler, second one will execute the command immediately |
| pu16DataRead,: | Pointer to where data read should be stored. two 16-bit words will be stored: First to be disregarded, second word will contain two 8-bit words: First is status (should read $2E or $3E), second one is data). The second 16-bit word can be fed as argument to u8fnMMA6800ExtractRegisterResponse to get a valid answer. |
| const uint16_t cau16MMA6500ReadAllRegisters[] |
{
(MMA6800_SN0 | (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_SN1
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_SN2
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_SN3
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_STDEFL_X
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_STDEFL_Y
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_FCTCFG_X
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_FCTCFG_Y
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_PN
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_DEVCTL
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_DEVCFG
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_DEVCFG_X
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_DEVCFG_Y
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_ARMCFGX
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_ARMCFGY
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_ARMT_XP
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_ARMT_YP
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_ARMT_XN
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_ARMT_YN
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_DEVSTAT
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_COUNT
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_OFF_CORR_X
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_OFF_CORR_Y
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR) }
| const uint16_t cau16MMA6800ReadAllRegisters[] |
{
(MMA6800_SN0 | (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_SN1
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_SN2
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_SN3
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_FCTCFG_X
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_FCTCFG_Y
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_PN
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_DEVCTL
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_DEVCFG
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_DEVCFG_X
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_DEVCFG_Y
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_ARMCFGX
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_ARMCFGY
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_ARMT_XP
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_ARMT_YP
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_ARMT_XN
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_ARMT_YN
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_DEVSTAT
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_COUNT
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_OFF_CORR_X
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR), (MMA6800_OFF_CORR_Y
| (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR) }
| const uint16_t cau16MMA6800Reset[] |
{
(MMA6800_DEVCTL | (MMA6800_WRITE_REGISTER << CHAR_BIT) | CLEAR),
(MMA6800_DEVCTL | (MMA6800_WRITE_REGISTER << CHAR_BIT) | 0xC0u),
(MMA6800_DEVCTL | (MMA6800_WRITE_REGISTER << CHAR_BIT) | 0x40u),
(MMA6800_DEVCFG | (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR),
(MMA6800_DEVCFG | (MMA6800_READ_REGISTER << CHAR_BIT) | CLEAR) }
| uint8_t(* const u8pfnMMA6800BatchOp[])(const uint8_t cu8DSPIInstance, const uint8_t cu8ChipSelect, const uint16_t *pu16DataToSend, uint16_t *pu16UnfilteredDataReceived, uint8_t u8Size) |